//const {SyncWaterfallHook} = require('tapable');
//当回调函数返回非undefined值的时候会停止调用后续的回调
class SyncWaterfallHook{
  constructor(args){
    this._args = args;//['name','age']
    this.taps = [];
  }
  tap(name,fn){
     this.taps.push(fn);
  }
  call(){
      let args = Array.from(arguments).slice(0,this._args.length);
      let result;
      let last;
      for(let i=0;i<this.taps.length;i++){
          result = this.taps[i](last||args[0],...args.slice(1));
          if(result)last=result;
      }
  }

}
let hook = new SyncWaterfallHook(['name','age']);
//hook.on();
//SyncWaterfallHook表示如果上一个回调函数的结果不为undefined,则可以作为下一个回调函数的第一个参数
hook.tap('1',(name,age)=>{
  console.log(1,name,age);
  return 'result1';
});
hook.tap('2',(name,age)=>{
  console.log(2,name,age);
});
hook.tap('3',(name,age)=>{
  console.log(3,name,age);
  return 'result3';
});
//hook.emit();hook.trigger();
hook.call('zhufeng',10);

